import axios from 'axios';

// 创建API服务实例
const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:5000';

const apiClient = axios.create({
  baseURL: API_URL,
  timeout: 60000, // 60秒超时
  headers: {
    'Content-Type': 'application/json',
  }
});

// 请求拦截器
apiClient.interceptors.request.use(
  (config) => {
    // 请求前可以做一些处理
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
apiClient.interceptors.response.use(
  (response) => {
    // 只返回响应数据
    return response.data;
  },
  (error) => {
    // 处理错误响应
    if (error.response) {
      // 服务器返回错误
      const errMsg = error.response.data?.message || '请求失败';
      console.error('API错误:', errMsg);
      return Promise.reject(new Error(errMsg));
    } else if (error.request) {
      // 请求发出但没有收到响应
      console.error('网络错误，未收到响应');
      return Promise.reject(new Error('网络错误，请检查您的网络连接'));
    } else {
      // 请求配置错误
      console.error('请求配置错误:', error.message);
      return Promise.reject(error);
    }
  }
);

// 文件API
const fileApi = {
  /**
   * 上传文件
   * @param {File} file - 文件对象
   * @returns {Promise} - 上传结果
   */
  uploadFile: async (file) => {
    const formData = new FormData();
    formData.append('file', file);
    
    return await axios.post(`${API_URL}/api/file/upload`, formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
  },
  
  /**
   * 压缩文件
   * @param {Array} fileIds - 文件ID数组
   * @param {string} format - 压缩格式
   * @param {string} level - 压缩级别
   * @returns {Promise} - 压缩结果
   */
  compressFiles: async (fileIds, format = 'zip', level = 'medium') => {
    return await apiClient.post('/api/file/compress', {
      fileIds,
      format,
      level
    });
  },
  
  /**
   * 获取文件下载链接
   * @param {string} fileId - 文件ID
   * @returns {string} - 文件下载URL
   */
  getFileDownloadUrl: (fileId) => {
    return `${API_URL}/api/file/download/${fileId}`;
  }
};

// 图片API
const imageApi = {
  /**
   * 上传图片
   * @param {File} file - 图片文件
   * @returns {Promise} - 上传结果
   */
  uploadImage: async (file) => {
    const formData = new FormData();
    formData.append('file', file);
    
    return await axios.post(`${API_URL}/api/image/upload`, formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
  },
  
  /**
   * 压缩图片
   * @param {string} fileId - 图片ID
   * @param {number} quality - 压缩质量(0-100)
   * @returns {Promise} - 压缩结果
   */
  compressImage: async (fileId, quality = 80) => {
    return await apiClient.get(`/api/image/compress/${fileId}`, {
      params: { quality }
    });
  },
  
  /**
   * 裁剪图片
   * @param {string} fileId - 图片ID
   * @param {Object} cropData - 裁剪参数
   * @returns {Promise} - 裁剪结果
   */
  cropImage: async (fileId, cropData) => {
    return await apiClient.post(`/api/image/crop/${fileId}`, cropData);
  },
  
  /**
   * 转换图片格式
   * @param {string} fileId - 图片ID
   * @param {string} format - 目标格式
   * @returns {Promise} - 转换结果
   */
  convertImage: async (fileId, format) => {
    return await apiClient.get(`/api/image/convert/${fileId}`, {
      params: { format }
    });
  },
  
  /**
   * 添加水印
   * @param {string} fileId - 图片ID
   * @param {Object} watermarkData - 水印参数
   * @param {string} watermarkData.type - 水印类型 (text/image)
   * @param {string} watermarkData.text - 水印文本 (当type为text时)
   * @param {string} watermarkData.imageId - 水印图片ID (当type为image时)
   * @param {string} watermarkData.position - 水印位置
   * @param {number} watermarkData.opacity - 水印不透明度(0-100)
   * @param {number} watermarkData.angle - 水印旋转角度
   * @param {string} watermarkData.color - 文字水印颜色
   * @param {number} watermarkData.size - 文字水印大小
   * @returns {Promise} - 添加水印结果
   */
  addWatermark: async (fileId, watermarkData) => {
    return await apiClient.post(`/api/image/watermark/add/${fileId}`, watermarkData);
  },
  
  /**
   * 移除水印
   * @param {string} fileId - 图片ID
   * @param {Object} options - 移除选项
   * @returns {Promise} - 移除水印结果
   */
  removeWatermark: async (fileId, options = {}) => {
    return await apiClient.post(`/api/image/watermark/remove/${fileId}`, options);
  },
  
  /**
   * OCR文字识别
   * @param {string} fileId - 图片ID
   * @param {string} language - 识别语言代码
   * @param {string} mode - 识别模式（fast/accurate）
   * @returns {Promise} - OCR识别结果
   */
  ocrImage: async (fileId, language = 'chi_sim', mode = 'accurate') => {
    return await apiClient.get(`/api/image/ocr/${fileId}`, {
      params: { language, mode }
    });
  },
  
  /**
   * 图像文字替换
   * @param {string} fileId - 图片ID
   * @param {Object} textReplaceData - 文字替换参数
   * @param {string} textReplaceData.originalText - 原始文字
   * @param {string} textReplaceData.newText - 替换的新文字
   * @param {string} textReplaceData.fontFamily - 字体
   * @param {string} textReplaceData.fontSize - 字体大小
   * @param {string} textReplaceData.fontColor - 字体颜色
   * @returns {Promise} - 文字替换结果
   */
  textReplaceImage: async (fileId, textReplaceData) => {
    return await apiClient.post(`/api/image/text-replace/${fileId}`, textReplaceData);
  },
  
  /**
   * 获取图片下载链接
   * @param {string} fileId - 图片ID
   * @returns {string} - 图片下载URL
   */
  getImageDownloadUrl: (fileId) => {
    return `${API_URL}/api/image/download/${fileId}`;
  }
};

export { fileApi, imageApi }; 